package com.atguigu.tingshu.album.client;

import com.atguigu.tingshu.album.client.impl.AlbumInfoDegradeFeignClient;
import com.atguigu.tingshu.common.result.Result;
import com.atguigu.tingshu.model.album.AlbumInfo;
import com.atguigu.tingshu.model.album.BaseCategory3;
import com.atguigu.tingshu.model.album.BaseCategoryView;
import com.atguigu.tingshu.vo.album.AlbumListVo;
import com.atguigu.tingshu.vo.album.AlbumStatVo;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.List;

/**
 * <p>
 * 产品列表API接口
 * </p>
 *
 * @author qy
 */
@FeignClient(value = "service-album", path = "/api/album/rpc", fallback = AlbumInfoDegradeFeignClient.class)
public interface AlbumInfoFeignClient {

    /**
     * 根据专辑id获取专辑信息
     * @param albumId 专辑id
     * @return 专辑信息
     */
    @GetMapping("/getAlbumInfo/{albumId}")
    Result<AlbumInfo> getAlbumInfo(@PathVariable(value = "albumId") Long albumId);

    /**
     * [rpc]
     * 根据专辑id 获取到分类数据
     * @param albumId 专辑id
     * @return 分类数据
     */
    @GetMapping("/getCategoryView/{albumId}")
    Result<BaseCategoryView> getCategoryView(@PathVariable(value = "albumId") Long albumId);


    /**
     * [rpc] 根据专辑id获取专辑详情信息【四个维度】
     * @param albumId 专辑id
     * @return 专辑信息
     */
    @GetMapping("/getAlbumStatVoByAlbumId/{albumId}")
    Result<AlbumStatVo> getAlbumStatVoByAlbumId(@PathVariable(value = "albumId") Long albumId);


    /**
     * [rpc]
     * 根据一级分类id获取对应的前7个三级分类id对象
     * @param category1Id c1Id
     * @return 前七个三级分类id对象
     */
    @GetMapping("/getTop7Category3ByCategory1Id/{category1Id}")
    Result<List<BaseCategory3>> getTop7Category3ByCategory1Id(@PathVariable(value = "category1Id") Long category1Id);


    /**
     * [rpc]
     * 获取一级分类id集合
     * @return 一级分类id集合
     */
    @GetMapping("/getCategory1IdList")
    Result<List<Long>> getCategory1IdList();


    /**
     * [rpc]
     * 获取所有专辑id集合
     * @return 专辑id集合
     */
    @GetMapping("/getAllAlbumIdList")
    Result<List<Long>> getAllAlbumIdList();

    /**
     * [rpc]
     * 获取用户当前可购买的声音列表数据
     * @param userId 用户id
     * @param albumId 专辑id
     * @param trackId 音频id
     * @param trackCount 购买集数
     * @return 可购买音频列表
     */
    @GetMapping("/getCanPaidTrackInfoList/{userId}/{albumId}/{trackId}/{trackCount}")
    Result<List> getCanPaidTrackInfoList(@PathVariable(value = "userId") Long userId,
                                         @PathVariable(value = "albumId") Long albumId,
                                         @PathVariable(value = "trackId") Long trackId,
                                         @PathVariable(value = "trackCount") Integer trackCount);
}